
import redis.asyncio as redis
from app.core.config import settings

# 全局 Redis 客户端实例
redis_client: redis.Redis | None = None


async def init_redis() -> redis.Redis:
    """
    初始化 Redis 客户端
    从配置中读取 REDIS_URL 并创建连接
    """
    global redis_client
    if redis_client is None:
        redis_client = await redis.Redis.from_url(
            settings.REDIS_URL,
            encoding="utf-8",
            decode_responses=True,
            max_connections=10,  # 可根据需求调整连接池大小
            password=settings.REDIS_PASSWORD,
        )
    return redis_client


async def get_redis() -> redis.Redis:
    """
    获取 Redis 客户端实例
    确保在使用前已初始化
    """
    if redis_client is None:
        return await init_redis()
    return redis_client


async def close_redis() -> None:
    """关闭 Redis 连接"""
    global redis_client
    if redis_client is not None:
        await redis_client.close()
        redis_client = None
